package base;

/**
 * @Description: 参数传递
 * @Author: hmm
 * @CreateDate: 2019/8/2$ 21:20$
 * @UpdateUser: hmm
 * @UpdateDate: 2019/8/2$ 21:20$
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
public class ValuePropagation {

    public static void main(String[] args) {
        /**
         * 基本类型传递-不会改变
         */
        int i = 10;
        add(i);
        System.out.println(i);
        /**
         * String传递-不会改变
         */
        String a = "abc";
        String b = new String("ok");
        change(a);
        change(b);
        System.out.println(a);
        System.out.println(b);
        /**
         * 对象传递赋值会改变，new赋值不会变
         * 对象传递的是引用地址的复制，如果set后，对应对象就跟着变化
         * 如果重新new付给参数，原指向就不会变化
         */
        User user = new User();
        user.setUserName("张三");
        change(user);
        System.out.println(user.getUserName());
    }
    public static void add(int i) {
        i = 3;
    }
    public static void change(String a) {
        a = "xyz";
    }
    public static void change(User user) {
        user = new User();
        user.setUserName("李四");
    }
}
